home *** CD-ROM | disk | FTP | other *** search
- /***********************************************************
- Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
- The Netherlands.
-
- All Rights Reserved
-
- Permission to use, copy, modify, and distribute this software and its
- documentation for any purpose and without fee is hereby granted,
- provided that the above copyright notice appear in all copies and that
- both that copyright notice and this permission notice appear in
- supporting documentation, and that the names of Stichting Mathematisch
- Centrum or CWI or Corporation for National Research Initiatives or
- CNRI not be used in advertising or publicity pertaining to
- distribution of the software without specific, written prior
- permission.
-
- While CWI is the initial source for this software, a modified version
- is made available by the Corporation for National Research Initiatives
- (CNRI) at the Internet address ftp://ftp.python.org.
-
- STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
- REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
- CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-
- ******************************************************************/
-
-
- /* Cl objects */
-
- #define CLDEBUG
-
- #include <stdarg.h>
- #include <cl.h>
- #include "allobjects.h"
- #include "modsupport.h" /* For getargs() etc. */
- #include "ceval.h" /* For call_object() */
-
- typedef struct {
- OB_HEAD
- int ob_isCompressor; /* Compressor or Decompressor */
- CL_Handle ob_compressorHdl;
- int *ob_paramtypes;
- int ob_nparams;
- } clobject;
-
- static object *ClError; /* exception cl.error */
-
- static int error_handler_called = 0;
-
- /*
- * We want to use the function prototypes that are available in the C
- * compiler on the SGI. Because of that, we need to declare the first
- * argument of the compressor and decompressor methods as "object *",
- * even though they are really "clobject *". Therefore we cast the
- * argument to the proper type using this macro.
- */
- #define SELF ((clobject *) self)
-
- /********************************************************************
- Utility routines.
- ********************************************************************/
- static void
- cl_ErrorHandler(CL_Handle handle, int code, const char *fmt, ...)
- {
- va_list ap;
- char errbuf[BUFSIZ]; /* hopefully big enough */
- char *p;
-
- if (err_occurred()) /* don't change existing error */
- return;
- error_handler_called = 1;
- va_start(ap, fmt);
- vsprintf(errbuf, fmt, ap);
- va_end(ap);
- p = &errbuf[strlen(errbuf) - 1]; /* swat the line feed */
- if (*p == '\n')
- *p = 0;
- err_setstr(ClError, errbuf);
- }
-
- /*
- * This assumes that params are always in the range 0 to some maximum.
- */
- static int
- param_type_is_float(clobject *self, int param)
- {
- int bufferlength;
- int ret;
-
- if (self->ob_paramtypes == NULL) {
- error_handler_called = 0;
- bufferlength = clQueryParams(self->ob_compressorHdl, 0, 0);
- if (error_handler_called)
- return -1;
-
- self->ob_paramtypes = NEW(int, bufferlength);
- if (self->ob_paramtypes == NULL)
- return -1;
- self->ob_nparams = bufferlength / 2;
-
- (void) clQueryParams(self->ob_compressorHdl, self->ob_paramtypes, bufferlength);
- if (error_handler_called) {
- DEL(self->ob_paramtypes);
- self->ob_paramtypes = NULL;
- return -1;
- }
- }
-
- if (param < 0 || param >= self->ob_nparams)
- return -1;
-
- if (self->ob_paramtypes[param*2 + 1] == CL_FLOATING_ENUM_VALUE ||
- self->ob_paramtypes[param*2 + 1] == CL_FLOATING_RANGE_VALUE)
- return 1;
- else
- return 0;
- }
-
- /********************************************************************
- Single image compression/decompression.
- ********************************************************************/
- static object *
- cl_CompressImage(object *self, object *args)
- {
- int compressionScheme, width, height, originalFormat;
- float compressionRatio;
- int frameBufferSize, compressedBufferSize;
- char *frameBuffer;
- object *compressedBuffer;
-
- if (!getargs(args, "(iiiifs#)", &compressionScheme, &width, &height,
- &originalFormat, &compressionRatio, &frameBuffer,
- &frameBufferSize))
- return NULL;
-
- retry:
- compressedBuffer = newsizedstringobject(NULL, frameBufferSize);
- if (compressedBuffer == NULL)
- return NULL;
-
- compressedBufferSize = frameBufferSize;
- error_handler_called = 0;
- if (clCompressImage(compressionScheme, width, height, originalFormat,
- compressionRatio, (void *) frameBuffer,
- &compressedBufferSize,
- (void *) getstringvalue(compressedBuffer))
- == FAILURE) {
- DECREF(compressedBuffer);
- if (!error_handler_called)
- err_setstr(ClError, "clCompressImage failed");
- return NULL;
- }
-
- if (compressedBufferSize > frameBufferSize) {
- frameBufferSize = compressedBufferSize;
- DECREF(compressedBuffer);
- goto retry;
- }
-
- if (compressedBufferSize < frameBufferSize)
- if (resizestring(&compressedBuffer, compressedBufferSize))
- return NULL;
-
- return compressedBuffer;
- }
-
- static object *
- cl_DecompressImage(object *self, object *args)
- {
- int compressionScheme, width, height, originalFormat;
- char *compressedBuffer;
- int compressedBufferSize, frameBufferSize;
- object *frameBuffer;
-
- if (!getargs(args, "(iiiis#)", &compressionScheme, &width, &height,
- &originalFormat, &compressedBuffer,
- &compressedBufferSize))
- return NULL;
-
- frameBufferSize = width * height * CL_BytesPerPixel(originalFormat);
-
- frameBuffer = newsizedstringobject(NULL, frameBufferSize);
- if (frameBuffer == NULL)
- return NULL;
-
- error_handler_called = 0;
- if (clDecompressImage(compressionScheme, width, height, originalFormat,
- compressedBufferSize, compressedBuffer,
- (void *) getstringvalue(frameBuffer)) == FAILURE) {
- DECREF(frameBuffer);
- if (!error_handler_called)
- err_setstr(ClError, "clDecompressImage failed");
- return NULL;
- }
-
- return frameBuffer;
- }
-
- /********************************************************************
- Sequential compression/decompression.
- ********************************************************************/
- #define CheckCompressor(self) if ((self)->ob_compressorHdl == NULL) { \
- err_setstr(RuntimeError, "(de)compressor not active"); \
- return NULL; \
- }
-
- static object *
- doClose(clobject *self, object *args, int (*close_func)(CL_Handle))
- {
- CheckCompressor(self);
-
- if (!getnoarg(args))
- return NULL;
-
- error_handler_called = 0;
- if ((*close_func)(self->ob_compressorHdl) == FAILURE) {
- if (!error_handler_called)
- err_setstr(ClError, "close failed");
- return NULL;
- }
-
- self->ob_compressorHdl = NULL;
-
- if (self->ob_paramtypes)
- DEL(self->ob_paramtypes);
- self->ob_paramtypes = NULL;
-
- INCREF(None);
- return None;
- }
-
- static object *
- clm_CloseCompressor(object *self, object *args)
- {
- return doClose(SELF, args, clCloseCompressor);
- }
-
- static object *
- clm_CloseDecompressor(object *self, object *args)
- {
- return doClose(SELF, args, clCloseDecompressor);
- }
-
- static object *
- clm_Compress(object *self, object *args)
- {
- int numberOfFrames;
- int frameBufferSize, compressedBufferSize, size;
- char *frameBuffer;
- object *data;
-
- CheckCompressor(SELF);
-
- if (!getargs(args, "(is#)", &numberOfFrames, &frameBuffer, &frameBufferSize))
- return NULL;
-
- error_handler_called = 0;
- size = clGetParam(SELF->ob_compressorHdl, CL_COMPRESSED_BUFFER_SIZE);
- compressedBufferSize = size;
- if (error_handler_called)
- return NULL;
-
- data = newsizedstringobject(NULL, size);
- if (data == NULL)
- return NULL;
-
- error_handler_called = 0;
- if (clCompress(SELF->ob_compressorHdl, numberOfFrames,
- (void *) frameBuffer, &compressedBufferSize,
- (void *) getstringvalue(data)) == FAILURE) {
- DECREF(data);
- if (!error_handler_called)
- err_setstr(ClError, "compress failed");
- return NULL;
- }
-
- if (compressedBufferSize < size)
- if (resizestring(&data, compressedBufferSize))
- return NULL;
-
- if (compressedBufferSize > size) {
- /* we didn't get all "compressed" data */
- DECREF(data);
- err_setstr(ClError, "compressed data is more than fitted");
- return NULL;
- }
-
- return data;
- }
-
- static object *
- clm_Decompress(object *self, object *args)
- {
- object *data;
- int numberOfFrames;
- char *compressedData;
- int compressedDataSize, dataSize;
-
- CheckCompressor(SELF);
-
- if (!getargs(args, "(is#)", &numberOfFrames, &compressedData,
- &compressedDataSize))
- return NULL;
-
- error_handler_called = 0;
- dataSize = clGetParam(SELF->ob_compressorHdl, CL_FRAME_BUFFER_SIZE);
- if (error_handler_called)
- return NULL;
-
- data = newsizedstringobject(NULL, dataSize);
- if (data == NULL)
- return NULL;
-
- error_handler_called = 0;
- if (clDecompress(SELF->ob_compressorHdl, numberOfFrames,
- compressedDataSize, (void *) compressedData,
- (void *) getstringvalue(data)) == FAILURE) {
- DECREF(data);
- if (!error_handler_called)
- err_setstr(ClError, "decompress failed");
- return NULL;
- }
-
- return data;
- }
-
- static object *
- doParams(clobject *self, object *args, int (*func)(CL_Handle, int *, int),
- int modified)
- {
- object *list, *v;
- int *PVbuffer;
- int length;
- int i;
- float number;
-
- CheckCompressor(self);
-
- if (!getargs(args, "O", &list))
- return NULL;
- if (!is_listobject(list)) {
- err_badarg();
- return NULL;
- }
- length = getlistsize(list);
- PVbuffer = NEW(int, length);
- if (PVbuffer == NULL)
- return err_nomem();
- for (i = 0; i < length; i++) {
- v = getlistitem(list, i);
- if (is_floatobject(v)) {
- number = getfloatvalue(v);
- PVbuffer[i] = CL_TypeIsInt(number);
- } else if (is_intobject(v)) {
- PVbuffer[i] = getintvalue(v);
- if ((i & 1) &&
- param_type_is_float(self, PVbuffer[i-1]) > 0) {
- number = PVbuffer[i];
- PVbuffer[i] = CL_TypeIsInt(number);
- }
- } else {
- DEL(PVbuffer);
- err_badarg();
- return NULL;
- }
- }
-
- error_handler_called = 0;
- (*func)(self->ob_compressorHdl, PVbuffer, length);
- if (error_handler_called) {
- DEL(PVbuffer);
- return NULL;
- }
-
- if (modified) {
- for (i = 0; i < length; i++) {
- if ((i & 1) &&
- param_type_is_float(self, PVbuffer[i-1]) > 0) {
- number = CL_TypeIsFloat(PVbuffer[i]);
- v = newfloatobject(number);
- } else
- v = newintobject(PVbuffer[i]);
- setlistitem(list, i, v);
- }
- }
-
- DEL(PVbuffer);
-
- INCREF(None);
- return None;
- }
-
- static object *
- clm_GetParams(object *self, object *args)
- {
- return doParams(SELF, args, clGetParams, 1);
- }
-
- static object *
- clm_SetParams(object *self, object *args)
- {
- return doParams(SELF, args, clSetParams, 0);
- }
-
- static object *
- do_get(clobject *self, object *args, int (*func)(CL_Handle, int))
- {
- int paramID, value;
- float fvalue;
-
- CheckCompressor(self);
-
- if (!getargs(args, "i", ¶mID))
- return NULL;
-
- error_handler_called = 0;
- value = (*func)(self->ob_compressorHdl, paramID);
- if (error_handler_called)
- return NULL;
-
- if (param_type_is_float(self, paramID) > 0) {
- fvalue = CL_TypeIsFloat(value);
- return newfloatobject(fvalue);
- }
-
- return newintobject(value);
- }
-
- static object *
- clm_GetParam(object *self, object *args)
- {
- return do_get(SELF, args, clGetParam);
- }
-
- static object *
- clm_GetDefault(object *self, object *args)
- {
- return do_get(SELF, args, clGetDefault);
- }
-
- static object *
- clm_SetParam(object *self, object *args)
- {
- int paramID, value;
- float fvalue;
-
- CheckCompressor(SELF);
-
- if (!getargs(args, "(ii)", ¶mID, &value)) {
- err_clear();
- if (!getargs(args, "(if)", ¶mID, &fvalue)) {
- err_clear();
- err_setstr(TypeError, "bad argument list (format '(ii)' or '(if)')");
- return NULL;
- }
- value = CL_TypeIsInt(fvalue);
- } else {
- if (param_type_is_float(SELF, paramID) > 0) {
- fvalue = value;
- value = CL_TypeIsInt(fvalue);
- }
- }
-
- error_handler_called = 0;
- value = clSetParam(SELF->ob_compressorHdl, paramID, value);
- if (error_handler_called)
- return NULL;
-
- if (param_type_is_float(SELF, paramID) > 0)
- return newfloatobject(CL_TypeIsFloat(value));
- else
- return newintobject(value);
- }
-
- static object *
- clm_GetParamID(object *self, object *args)
- {
- char *name;
- int value;
-
- CheckCompressor(SELF);
-
- if (!getargs(args, "s", &name))
- return NULL;
-
- error_handler_called = 0;
- value = clGetParamID(SELF->ob_compressorHdl, name);
- if (value == FAILURE) {
- if (!error_handler_called)
- err_setstr(ClError, "getparamid failed");
- return NULL;
- }
-
- return newintobject(value);
- }
-
- static object *
- clm_QueryParams(object *self, object *args)
- {
- int bufferlength;
- int *PVbuffer;
- object *list;
- int i;
-
- CheckCompressor(SELF);
-
- if (!getnoarg(args))
- return NULL;
-
- error_handler_called = 0;
- bufferlength = clQueryParams(SELF->ob_compressorHdl, 0, 0);
- if (error_handler_called)
- return NULL;
-
- PVbuffer = NEW(int, bufferlength);
- if (PVbuffer == NULL)
- return err_nomem();
-
- bufferlength = clQueryParams(SELF->ob_compressorHdl, PVbuffer,
- bufferlength);
- if (error_handler_called) {
- DEL(PVbuffer);
- return NULL;
- }
-
- list = newlistobject(bufferlength);
- if (list == NULL) {
- DEL(PVbuffer);
- return NULL;
- }
-
- for (i = 0; i < bufferlength; i++) {
- if (i & 1)
- setlistitem(list, i, newintobject(PVbuffer[i]));
- else if (PVbuffer[i] == 0) {
- INCREF(None);
- setlistitem(list, i, None);
- } else
- setlistitem(list, i, newstringobject((char *) PVbuffer[i]));
- }
-
- DEL(PVbuffer);
-
- return list;
- }
-
- static object *
- clm_GetMinMax(object *self, object *args)
- {
- int param, min, max;
- float fmin, fmax;
-
- CheckCompressor(SELF);
-
- if (!getargs(args, "i", ¶m))
- return NULL;
-
- clGetMinMax(SELF->ob_compressorHdl, param, &min, &max);
-
- if (param_type_is_float(SELF, param) > 0) {
- fmin = CL_TypeIsFloat(min);
- fmax = CL_TypeIsFloat(max);
- return mkvalue("(ff)", fmin, fmax);
- }
-
- return mkvalue("(ii)", min, max);
- }
-
- static object *
- clm_GetName(object *self, object *args)
- {
- int param;
- char *name;
-
- CheckCompressor(SELF);
-
- if (!getargs(args, "i", ¶m))
- return NULL;
-
- error_handler_called = 0;
- name = clGetName(SELF->ob_compressorHdl, param);
- if (name == NULL || error_handler_called) {
- if (!error_handler_called)
- err_setstr(ClError, "getname failed");
- return NULL;
- }
-
- return newstringobject(name);
- }
-
- static object *
- clm_QuerySchemeFromHandle(object *self, object *args)
- {
- CheckCompressor(SELF);
-
- if (!getnoarg(args))
- return NULL;
-
- return newintobject(clQuerySchemeFromHandle(SELF->ob_compressorHdl));
- }
-
- static object *
- clm_ReadHeader(object *self, object *args)
- {
- char *header;
- int headerSize;
-
- CheckCompressor(SELF);
-
- if (!getargs(args, "s#", &header, &headerSize))
- return NULL;
-
- return newintobject(clReadHeader(SELF->ob_compressorHdl,
- headerSize, header));
- }
-
- static struct methodlist compressor_methods[] = {
- {"close", clm_CloseCompressor}, /* alias */
- {"CloseCompressor", clm_CloseCompressor},
- {"Compress", clm_Compress},
- {"GetDefault", clm_GetDefault},
- {"GetMinMax", clm_GetMinMax},
- {"GetName", clm_GetName},
- {"GetParam", clm_GetParam},
- {"GetParamID", clm_GetParamID},
- {"GetParams", clm_GetParams},
- {"QueryParams", clm_QueryParams},
- {"QuerySchemeFromHandle",clm_QuerySchemeFromHandle},
- {"SetParam", clm_SetParam},
- {"SetParams", clm_SetParams},
- {NULL, NULL} /* sentinel */
- };
-
- static struct methodlist decompressor_methods[] = {
- {"close", clm_CloseDecompressor}, /* alias */
- {"CloseDecompressor", clm_CloseDecompressor},
- {"Decompress", clm_Decompress},
- {"GetDefault", clm_GetDefault},
- {"GetMinMax", clm_GetMinMax},
- {"GetName", clm_GetName},
- {"GetParam", clm_GetParam},
- {"GetParamID", clm_GetParamID},
- {"GetParams", clm_GetParams},
- {"ReadHeader", clm_ReadHeader},
- {"QueryParams", clm_QueryParams},
- {"QuerySchemeFromHandle",clm_QuerySchemeFromHandle},
- {"SetParam", clm_SetParam},
- {"SetParams", clm_SetParams},
- {NULL, NULL} /* sentinel */
- };
-
- static void
- cl_dealloc(object *self)
- {
- if (SELF->ob_compressorHdl) {
- if (SELF->ob_isCompressor)
- clCloseCompressor(SELF->ob_compressorHdl);
- else
- clCloseDecompressor(SELF->ob_compressorHdl);
- }
- DEL(self);
- }
-
- static object *
- cl_getattr(object *self, char *name)
- {
- if (SELF->ob_isCompressor)
- return findmethod(compressor_methods, self, name);
- else
- return findmethod(decompressor_methods, self, name);
- }
-
- static typeobject Cltype = {
- OB_HEAD_INIT(&Typetype)
- 0, /*ob_size*/
- "cl", /*tp_name*/
- sizeof(clobject), /*tp_size*/
- 0, /*tp_itemsize*/
- /* methods */
- (destructor)cl_dealloc, /*tp_dealloc*/
- 0, /*tp_print*/
- (getattrfunc)cl_getattr, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_compare*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- };
-
- static object *
- doOpen(object *self, object *args, int (*open_func)(int, CL_Handle *),
- int iscompressor)
- {
- int scheme;
- clobject *new;
-
- if (!getargs(args, "i", &scheme))
- return NULL;
-
- new = NEWOBJ(clobject, &Cltype);
- if (new == NULL)
- return NULL;
-
- new->ob_compressorHdl = NULL;
- new->ob_isCompressor = iscompressor;
- new->ob_paramtypes = NULL;
-
- error_handler_called = 0;
- if ((*open_func)(scheme, &new->ob_compressorHdl) == FAILURE) {
- DECREF(new);
- if (!error_handler_called)
- err_setstr(ClError, "Open(De)Compressor failed");
- return NULL;
- }
- return (object *)new;
- }
-
- static object *
- cl_OpenCompressor(object *self, object *args)
- {
- return doOpen(self, args, clOpenCompressor, 1);
- }
-
- static object *
- cl_OpenDecompressor(object *self, object *args)
- {
- return doOpen(self, args, clOpenDecompressor, 0);
- }
-
- static object *
- cl_QueryScheme(object *self, object *args)
- {
- char *header;
- int headerlen;
- int scheme;
-
- if (!getargs(args, "s#", &header, &headerlen))
- return NULL;
-
- scheme = clQueryScheme(header);
- if (scheme < 0) {
- err_setstr(ClError, "unknown compression scheme");
- return NULL;
- }
-
- return newintobject(scheme);
- }
-
- static object *
- cl_QueryMaxHeaderSize(object *self, object *args)
- {
- int scheme;
-
- if (!getargs(args, "i", &scheme))
- return NULL;
-
- return newintobject(clQueryMaxHeaderSize(scheme));
- }
-
- static object *
- cl_QueryAlgorithms(object *self, object *args)
- {
- int algorithmMediaType;
- int bufferlength;
- int *PVbuffer;
- object *list;
- int i;
-
- if (!getargs(args, "i", &algorithmMediaType))
- return NULL;
-
- error_handler_called = 0;
- bufferlength = clQueryAlgorithms(algorithmMediaType, 0, 0);
- if (error_handler_called)
- return NULL;
-
- PVbuffer = NEW(int, bufferlength);
- if (PVbuffer == NULL)
- return err_nomem();
-
- bufferlength = clQueryAlgorithms(algorithmMediaType, PVbuffer,
- bufferlength);
- if (error_handler_called) {
- DEL(PVbuffer);
- return NULL;
- }
-
- list = newlistobject(bufferlength);
- if (list == NULL) {
- DEL(PVbuffer);
- return NULL;
- }
-
- for (i = 0; i < bufferlength; i++) {
- if (i & 1)
- setlistitem(list, i, newintobject(PVbuffer[i]));
- else if (PVbuffer[i] == 0) {
- INCREF(None);
- setlistitem(list, i, None);
- } else
- setlistitem(list, i, newstringobject((char *) PVbuffer[i]));
- }
-
- DEL(PVbuffer);
-
- return list;
- }
-
- static object *
- cl_QuerySchemeFromName(object *self, object *args)
- {
- int algorithmMediaType;
- char *name;
- int scheme;
-
- if (!getargs(args, "(is)", &algorithmMediaType, &name))
- return NULL;
-
- error_handler_called = 0;
- scheme = clQuerySchemeFromName(algorithmMediaType, name);
- if (error_handler_called) {
- err_setstr(ClError, "unknown compression scheme");
- return NULL;
- }
-
- return newintobject(scheme);
- }
-
- static object *
- cl_GetAlgorithmName(object *self, object *args)
- {
- int scheme;
- char *name;
-
- if (!getargs(args, "i", &scheme))
- return NULL;
-
- name = clGetAlgorithmName(scheme);
- if (name == 0) {
- err_setstr(ClError, "unknown compression scheme");
- return NULL;
- }
-
- return newstringobject(name);
- }
-
- static object *
- do_set(object *self, object *args, int (*func)(int, int, int))
- {
- int scheme, paramID, value;
- float fvalue;
- int is_float = 0;
-
- if (!getargs(args, "(iii)", &scheme, ¶mID, &value)) {
- err_clear();
- if (!getargs(args, "(iif)", &scheme, ¶mID, &fvalue)) {
- err_clear();
- err_setstr(TypeError, "bad argument list (format '(iii)' or '(iif)')");
- return NULL;
- }
- value = CL_TypeIsInt(fvalue);
- is_float = 1;
- } else {
- /* check some parameters which we know to be floats */
- switch (scheme) {
- case CL_COMPRESSION_RATIO:
- case CL_SPEED:
- fvalue = value;
- value = CL_TypeIsInt(fvalue);
- is_float = 1;
- break;
- }
- }
-
- error_handler_called = 0;
- value = (*func)(scheme, paramID, value);
- if (error_handler_called)
- return NULL;
-
- if (is_float)
- return newfloatobject(CL_TypeIsFloat(value));
- else
- return newintobject(value);
- }
-
- static object *
- cl_SetDefault(object *self, object *args)
- {
- return do_set(self, args, clSetDefault);
- }
-
- static object *
- cl_SetMin(object *self, object *args)
- {
- return do_set(self, args, clSetMin);
- }
-
- static object *
- cl_SetMax(object *self, object *args)
- {
- return do_set(self, args, clSetMax);
- }
-
- #define func(name, type) \
- static object *cl_##name(object *self, object *args) \
- { \
- int x; \
- if (!getargs(args, "i", &x)) return NULL; \
- return new##type##object(CL_##name(x)); \
- }
-
- #define func2(name, type) \
- static object *cl_##name(object *self, object *args) \
- { \
- int a1, a2; \
- if (!getargs(args, "(ii)", &a1, &a2)) return NULL; \
- return new##type##object(CL_##name(a1, a2)); \
- }
-
- func(BytesPerSample,int)
- func(BytesPerPixel,int)
- func(AudioFormatName,string)
- func(VideoFormatName,string)
- func(AlgorithmNumber,int)
- func(AlgorithmType,int)
- func2(Algorithm,int)
- func(ParamNumber,int)
- func(ParamType,int)
- func2(ParamID,int)
-
- #ifdef CLDEBUG
- static object *
- cvt_type(object *self, object *args)
- {
- int number;
- float fnumber;
-
- if (getargs(args, "i", &number))
- return newfloatobject(CL_TypeIsFloat(number));
- else {
- err_clear();
- if (getargs(args, "f", &fnumber))
- return newintobject(CL_TypeIsInt(fnumber));
- return NULL;
- }
- }
- #endif
-
- static struct methodlist cl_methods[] = {
- {"CompressImage", cl_CompressImage},
- {"DecompressImage", cl_DecompressImage},
- {"GetAlgorithmName", cl_GetAlgorithmName},
- {"OpenCompressor", cl_OpenCompressor},
- {"OpenDecompressor", cl_OpenDecompressor},
- {"QueryAlgorithms", cl_QueryAlgorithms},
- {"QueryMaxHeaderSize", cl_QueryMaxHeaderSize},
- {"QueryScheme", cl_QueryScheme},
- {"QuerySchemeFromName", cl_QuerySchemeFromName},
- {"SetDefault", cl_SetDefault},
- {"SetMax", cl_SetMax},
- {"SetMin", cl_SetMin},
- {"BytesPerSample", cl_BytesPerSample},
- {"BytesPerPixel", cl_BytesPerPixel},
- {"AudioFormatName", cl_AudioFormatName},
- {"VideoFormatName", cl_VideoFormatName},
- {"AlgorithmNumber", cl_AlgorithmNumber},
- {"AlgorithmType", cl_AlgorithmType},
- {"Algorithm", cl_Algorithm},
- {"ParamNumber", cl_ParamNumber},
- {"ParamType", cl_ParamType},
- {"ParamID", cl_ParamID},
- #ifdef CLDEBUG
- {"cvt_type", cvt_type},
- #endif
- {NULL, NULL} /* Sentinel */
- };
-
- #ifdef CL_JPEG_SOFTWARE
- #define IRIX_5_3_LIBRARY
- #endif
-
- void
- initcl()
- {
- object *m, *d;
-
- m = initmodule("cl", cl_methods);
- d = getmoduledict(m);
-
- ClError = newstringobject("cl.error");
- (void) dictinsert(d, "error", ClError);
-
- (void) dictinsert(d, "MAX_NUMBER_OF_ORIGINAL_FORMATS",
- newintobject(CL_MAX_NUMBER_OF_ORIGINAL_FORMATS));
- (void) dictinsert(d, "MONO", newintobject(CL_MONO));
- (void) dictinsert(d, "STEREO_INTERLEAVED",
- newintobject(CL_STEREO_INTERLEAVED));
- (void) dictinsert(d, "RGB", newintobject(CL_RGB));
- (void) dictinsert(d, "RGBX", newintobject(CL_RGBX));
- (void) dictinsert(d, "RGBA", newintobject(CL_RGBA));
- (void) dictinsert(d, "RGB332", newintobject(CL_RGB332));
- (void) dictinsert(d, "GRAYSCALE", newintobject(CL_GRAYSCALE));
- (void) dictinsert(d, "Y", newintobject(CL_Y));
- (void) dictinsert(d, "YUV", newintobject(CL_YUV));
- (void) dictinsert(d, "YCbCr", newintobject(CL_YCbCr));
- (void) dictinsert(d, "YUV422", newintobject(CL_YUV422));
- (void) dictinsert(d, "YCbCr422", newintobject(CL_YCbCr422));
- (void) dictinsert(d, "YUV422HC", newintobject(CL_YUV422HC));
- (void) dictinsert(d, "YCbCr422HC", newintobject(CL_YCbCr422HC));
- (void) dictinsert(d, "YUV422DC", newintobject(CL_YUV422DC));
- (void) dictinsert(d, "YCbCr422DC", newintobject(CL_YCbCr422DC));
- (void) dictinsert(d, "RGB8", newintobject(CL_RGB8));
- (void) dictinsert(d, "BEST_FIT", newintobject(CL_BEST_FIT));
- (void) dictinsert(d, "MAX_NUMBER_OF_AUDIO_ALGORITHMS",
- newintobject(CL_MAX_NUMBER_OF_AUDIO_ALGORITHMS));
- (void) dictinsert(d, "MAX_NUMBER_OF_VIDEO_ALGORITHMS",
- newintobject(CL_MAX_NUMBER_OF_VIDEO_ALGORITHMS));
- (void) dictinsert(d, "AUDIO", newintobject(CL_AUDIO));
- (void) dictinsert(d, "VIDEO", newintobject(CL_VIDEO));
- (void) dictinsert(d, "UNKNOWN_SCHEME",
- newintobject(CL_UNKNOWN_SCHEME));
- (void) dictinsert(d, "UNCOMPRESSED_AUDIO",
- newintobject(CL_UNCOMPRESSED_AUDIO));
- (void) dictinsert(d, "G711_ULAW", newintobject(CL_G711_ULAW));
- (void) dictinsert(d, "ULAW", newintobject(CL_ULAW));
- (void) dictinsert(d, "G711_ALAW", newintobject(CL_G711_ALAW));
- (void) dictinsert(d, "ALAW", newintobject(CL_ALAW));
- (void) dictinsert(d, "AWARE_MPEG_AUDIO",
- newintobject(CL_AWARE_MPEG_AUDIO));
- (void) dictinsert(d, "AWARE_MULTIRATE",
- newintobject(CL_AWARE_MULTIRATE));
- (void) dictinsert(d, "UNCOMPRESSED", newintobject(CL_UNCOMPRESSED));
- (void) dictinsert(d, "UNCOMPRESSED_VIDEO",
- newintobject(CL_UNCOMPRESSED_VIDEO));
- (void) dictinsert(d, "RLE", newintobject(CL_RLE));
- (void) dictinsert(d, "JPEG", newintobject(CL_JPEG));
- #ifdef IRIX_5_3_LIBRARY
- (void) dictinsert(d, "JPEG_SOFTWARE", newintobject(CL_JPEG_SOFTWARE));
- #endif
- (void) dictinsert(d, "MPEG_VIDEO", newintobject(CL_MPEG_VIDEO));
- (void) dictinsert(d, "MVC1", newintobject(CL_MVC1));
- (void) dictinsert(d, "RTR", newintobject(CL_RTR));
- (void) dictinsert(d, "RTR1", newintobject(CL_RTR1));
- (void) dictinsert(d, "HDCC", newintobject(CL_HDCC));
- (void) dictinsert(d, "MVC2", newintobject(CL_MVC2));
- (void) dictinsert(d, "RLE24", newintobject(CL_RLE24));
- (void) dictinsert(d, "MAX_NUMBER_OF_PARAMS",
- newintobject(CL_MAX_NUMBER_OF_PARAMS));
- (void) dictinsert(d, "IMAGE_WIDTH", newintobject(CL_IMAGE_WIDTH));
- (void) dictinsert(d, "IMAGE_HEIGHT", newintobject(CL_IMAGE_HEIGHT));
- (void) dictinsert(d, "ORIGINAL_FORMAT",
- newintobject(CL_ORIGINAL_FORMAT));
- (void) dictinsert(d, "INTERNAL_FORMAT",
- newintobject(CL_INTERNAL_FORMAT));
- (void) dictinsert(d, "COMPONENTS", newintobject(CL_COMPONENTS));
- (void) dictinsert(d, "BITS_PER_COMPONENT",
- newintobject(CL_BITS_PER_COMPONENT));
- (void) dictinsert(d, "FRAME_RATE", newintobject(CL_FRAME_RATE));
- (void) dictinsert(d, "COMPRESSION_RATIO",
- newintobject(CL_COMPRESSION_RATIO));
- (void) dictinsert(d, "EXACT_COMPRESSION_RATIO",
- newintobject(CL_EXACT_COMPRESSION_RATIO));
- (void) dictinsert(d, "FRAME_BUFFER_SIZE",
- newintobject(CL_FRAME_BUFFER_SIZE));
- (void) dictinsert(d, "COMPRESSED_BUFFER_SIZE",
- newintobject(CL_COMPRESSED_BUFFER_SIZE));
- (void) dictinsert(d, "BLOCK_SIZE", newintobject(CL_BLOCK_SIZE));
- (void) dictinsert(d, "PREROLL", newintobject(CL_PREROLL));
- (void) dictinsert(d, "FRAME_TYPE", newintobject(CL_FRAME_TYPE));
- (void) dictinsert(d, "ALGORITHM_ID", newintobject(CL_ALGORITHM_ID));
- (void) dictinsert(d, "ALGORITHM_VERSION",
- newintobject(CL_ALGORITHM_VERSION));
- (void) dictinsert(d, "ORIENTATION", newintobject(CL_ORIENTATION));
- (void) dictinsert(d, "NUMBER_OF_FRAMES",
- newintobject(CL_NUMBER_OF_FRAMES));
- (void) dictinsert(d, "SPEED", newintobject(CL_SPEED));
- (void) dictinsert(d, "LAST_FRAME_INDEX",
- newintobject(CL_LAST_FRAME_INDEX));
- #ifdef IRIX_5_3_LIBRARY
- (void) dictinsert(d, "ENABLE_IMAGEINFO",
- newintobject(CL_ENABLE_IMAGEINFO));
- (void) dictinsert(d, "INTERNAL_IMAGE_WIDTH",
- newintobject(CL_INTERNAL_IMAGE_WIDTH));
- (void) dictinsert(d, "INTERNAL_IMAGE_HEIGHT",
- newintobject(CL_INTERNAL_IMAGE_HEIGHT));
- #endif
- (void) dictinsert(d, "NUMBER_OF_PARAMS",
- newintobject(CL_NUMBER_OF_PARAMS));
- #ifdef IRIX_5_3_LIBRARY
- (void) dictinsert(d, "MVC2_LUMA_THRESHOLD",
- newintobject(CL_MVC2_LUMA_THRESHOLD));
- (void) dictinsert(d, "MVC2_CHROMA_THRESHOLD",
- newintobject(CL_MVC2_CHROMA_THRESHOLD));
- (void) dictinsert(d, "MVC2_EDGE_THRESHOLD",
- newintobject(CL_MVC2_EDGE_THRESHOLD));
- (void) dictinsert(d, "MVC2_BLENDING", newintobject(CL_MVC2_BLENDING));
- (void) dictinsert(d, "MVC2_BLENDING_OFF",
- newintobject(CL_MVC2_BLENDING_OFF));
- (void) dictinsert(d, "MVC2_BLENDING_ON",
- newintobject(CL_MVC2_BLENDING_ON));
- (void) dictinsert(d, "JPEG_QUALITY_FACTOR",
- newintobject(CL_JPEG_QUALITY_FACTOR));
- (void) dictinsert(d, "JPEG_STREAM_HEADERS",
- newintobject(CL_JPEG_STREAM_HEADERS));
- (void) dictinsert(d, "JPEG_QUANTIZATION_TABLES",
- newintobject(CL_JPEG_QUANTIZATION_TABLES));
- (void) dictinsert(d, "JPEG_NUM_PARAMS",
- newintobject(CL_JPEG_NUM_PARAMS));
- (void) dictinsert(d, "RTR_QUALITY_LEVEL",
- newintobject(CL_RTR_QUALITY_LEVEL));
- (void) dictinsert(d, "HDCC_TILE_THRESHOLD",
- newintobject(CL_HDCC_TILE_THRESHOLD));
- (void) dictinsert(d, "HDCC_SAMPLES_PER_TILE",
- newintobject(CL_HDCC_SAMPLES_PER_TILE));
- #endif
- (void) dictinsert(d, "END_OF_SEQUENCE",
- newintobject(CL_END_OF_SEQUENCE));
- (void) dictinsert(d, "CHANNEL_POLICY",
- newintobject(CL_CHANNEL_POLICY));
- (void) dictinsert(d, "NOISE_MARGIN", newintobject(CL_NOISE_MARGIN));
- (void) dictinsert(d, "BITRATE_POLICY",
- newintobject(CL_BITRATE_POLICY));
- (void) dictinsert(d, "BITRATE_TARGET",
- newintobject(CL_BITRATE_TARGET));
- (void) dictinsert(d, "LAYER", newintobject(CL_LAYER));
- (void) dictinsert(d, "ENUM_VALUE", newintobject(CL_ENUM_VALUE));
- (void) dictinsert(d, "RANGE_VALUE", newintobject(CL_RANGE_VALUE));
- (void) dictinsert(d, "FLOATING_ENUM_VALUE",
- newintobject(CL_FLOATING_ENUM_VALUE));
- (void) dictinsert(d, "FLOATING_RANGE_VALUE",
- newintobject(CL_FLOATING_RANGE_VALUE));
- (void) dictinsert(d, "DECOMPRESSOR", newintobject(CL_DECOMPRESSOR));
- (void) dictinsert(d, "COMPRESSOR", newintobject(CL_COMPRESSOR));
- (void) dictinsert(d, "CODEC", newintobject(CL_CODEC));
- (void) dictinsert(d, "NONE", newintobject(CL_NONE));
- #ifdef IRIX_5_3_LIBRARY
- (void) dictinsert(d, "BUF_FRAME", newintobject(CL_BUF_FRAME));
- (void) dictinsert(d, "BUF_DATA", newintobject(CL_BUF_DATA));
- #endif
- #ifdef CL_FRAME
- (void) dictinsert(d, "FRAME", newintobject(CL_FRAME));
- (void) dictinsert(d, "DATA", newintobject(CL_DATA));
- #endif
- (void) dictinsert(d, "NONE", newintobject(CL_NONE));
- (void) dictinsert(d, "KEYFRAME", newintobject(CL_KEYFRAME));
- (void) dictinsert(d, "INTRA", newintobject(CL_INTRA));
- (void) dictinsert(d, "PREDICTED", newintobject(CL_PREDICTED));
- (void) dictinsert(d, "BIDIRECTIONAL", newintobject(CL_BIDIRECTIONAL));
- (void) dictinsert(d, "TOP_DOWN", newintobject(CL_TOP_DOWN));
- (void) dictinsert(d, "BOTTOM_UP", newintobject(CL_BOTTOM_UP));
- #ifdef IRIX_5_3_LIBRARY
- (void) dictinsert(d, "CONTINUOUS_BLOCK",
- newintobject(CL_CONTINUOUS_BLOCK));
- (void) dictinsert(d, "CONTINUOUS_NONBLOCK",
- newintobject(CL_CONTINUOUS_NONBLOCK));
- (void) dictinsert(d, "EXTERNAL_DEVICE",
- newintobject((long)CL_EXTERNAL_DEVICE));
- #endif
- (void) dictinsert(d, "AWCMP_STEREO", newintobject(AWCMP_STEREO));
- (void) dictinsert(d, "AWCMP_JOINT_STEREO",
- newintobject(AWCMP_JOINT_STEREO));
- (void) dictinsert(d, "AWCMP_INDEPENDENT",
- newintobject(AWCMP_INDEPENDENT));
- (void) dictinsert(d, "AWCMP_FIXED_RATE",
- newintobject(AWCMP_FIXED_RATE));
- (void) dictinsert(d, "AWCMP_CONST_QUAL",
- newintobject(AWCMP_CONST_QUAL));
- (void) dictinsert(d, "AWCMP_LOSSLESS", newintobject(AWCMP_LOSSLESS));
- (void) dictinsert(d, "AWCMP_MPEG_LAYER_I",
- newintobject(AWCMP_MPEG_LAYER_I));
- (void) dictinsert(d, "AWCMP_MPEG_LAYER_II",
- newintobject(AWCMP_MPEG_LAYER_II));
- (void) dictinsert(d, "HEADER_START_CODE",
- newintobject(CL_HEADER_START_CODE));
- (void) dictinsert(d, "BAD_NO_BUFFERSPACE",
- newintobject(CL_BAD_NO_BUFFERSPACE));
- (void) dictinsert(d, "BAD_PVBUFFER", newintobject(CL_BAD_PVBUFFER));
- (void) dictinsert(d, "BAD_BUFFERLENGTH_NEG",
- newintobject(CL_BAD_BUFFERLENGTH_NEG));
- (void) dictinsert(d, "BAD_BUFFERLENGTH_ODD",
- newintobject(CL_BAD_BUFFERLENGTH_ODD));
- (void) dictinsert(d, "BAD_PARAM", newintobject(CL_BAD_PARAM));
- (void) dictinsert(d, "BAD_COMPRESSION_SCHEME",
- newintobject(CL_BAD_COMPRESSION_SCHEME));
- (void) dictinsert(d, "BAD_COMPRESSOR_HANDLE",
- newintobject(CL_BAD_COMPRESSOR_HANDLE));
- (void) dictinsert(d, "BAD_COMPRESSOR_HANDLE_POINTER",
- newintobject(CL_BAD_COMPRESSOR_HANDLE_POINTER));
- (void) dictinsert(d, "BAD_BUFFER_HANDLE",
- newintobject(CL_BAD_BUFFER_HANDLE));
- (void) dictinsert(d, "BAD_BUFFER_QUERY_SIZE",
- newintobject(CL_BAD_BUFFER_QUERY_SIZE));
- (void) dictinsert(d, "JPEG_ERROR", newintobject(CL_JPEG_ERROR));
- (void) dictinsert(d, "BAD_FRAME_SIZE",
- newintobject(CL_BAD_FRAME_SIZE));
- (void) dictinsert(d, "PARAM_OUT_OF_RANGE",
- newintobject(CL_PARAM_OUT_OF_RANGE));
- (void) dictinsert(d, "ADDED_ALGORITHM_ERROR",
- newintobject(CL_ADDED_ALGORITHM_ERROR));
- (void) dictinsert(d, "BAD_ALGORITHM_TYPE",
- newintobject(CL_BAD_ALGORITHM_TYPE));
- (void) dictinsert(d, "BAD_ALGORITHM_NAME",
- newintobject(CL_BAD_ALGORITHM_NAME));
- (void) dictinsert(d, "BAD_BUFFERING", newintobject(CL_BAD_BUFFERING));
- (void) dictinsert(d, "BUFFER_NOT_CREATED",
- newintobject(CL_BUFFER_NOT_CREATED));
- (void) dictinsert(d, "BAD_BUFFER_EXISTS",
- newintobject(CL_BAD_BUFFER_EXISTS));
- (void) dictinsert(d, "BAD_INTERNAL_FORMAT",
- newintobject(CL_BAD_INTERNAL_FORMAT));
- (void) dictinsert(d, "BAD_BUFFER_POINTER",
- newintobject(CL_BAD_BUFFER_POINTER));
- (void) dictinsert(d, "FRAME_BUFFER_SIZE_ZERO",
- newintobject(CL_FRAME_BUFFER_SIZE_ZERO));
- (void) dictinsert(d, "BAD_STREAM_HEADER",
- newintobject(CL_BAD_STREAM_HEADER));
- (void) dictinsert(d, "BAD_LICENSE", newintobject(CL_BAD_LICENSE));
- (void) dictinsert(d, "AWARE_ERROR", newintobject(CL_AWARE_ERROR));
- (void) dictinsert(d, "BAD_BUFFER_SIZE_POINTER",
- newintobject(CL_BAD_BUFFER_SIZE_POINTER));
- (void) dictinsert(d, "BAD_BUFFER_SIZE",
- newintobject(CL_BAD_BUFFER_SIZE));
- (void) dictinsert(d, "BAD_BUFFER_TYPE",
- newintobject(CL_BAD_BUFFER_TYPE));
- (void) dictinsert(d, "BAD_HEADER_SIZE",
- newintobject(CL_BAD_HEADER_SIZE));
- (void) dictinsert(d, "BAD_FUNCTION_POINTER",
- newintobject(CL_BAD_FUNCTION_POINTER));
- (void) dictinsert(d, "BAD_SCHEME_POINTER",
- newintobject(CL_BAD_SCHEME_POINTER));
- (void) dictinsert(d, "BAD_STRING_POINTER",
- newintobject(CL_BAD_STRING_POINTER));
- (void) dictinsert(d, "BAD_MIN_GT_MAX",
- newintobject(CL_BAD_MIN_GT_MAX));
- (void) dictinsert(d, "BAD_INITIAL_VALUE",
- newintobject(CL_BAD_INITIAL_VALUE));
- (void) dictinsert(d, "BAD_PARAM_ID_POINTER",
- newintobject(CL_BAD_PARAM_ID_POINTER));
- (void) dictinsert(d, "BAD_PARAM_TYPE",
- newintobject(CL_BAD_PARAM_TYPE));
- (void) dictinsert(d, "BAD_TEXT_STRING_PTR",
- newintobject(CL_BAD_TEXT_STRING_PTR));
- (void) dictinsert(d, "BAD_FUNCTIONALITY",
- newintobject(CL_BAD_FUNCTIONALITY));
- (void) dictinsert(d, "BAD_NUMBER_OF_BLOCKS",
- newintobject(CL_BAD_NUMBER_OF_BLOCKS));
- (void) dictinsert(d, "BAD_BLOCK_SIZE",
- newintobject(CL_BAD_BLOCK_SIZE));
- (void) dictinsert(d, "BAD_POINTER", newintobject(CL_BAD_POINTER));
- (void) dictinsert(d, "BAD_BOARD", newintobject(CL_BAD_BOARD));
- (void) dictinsert(d, "MVC2_ERROR", newintobject(CL_MVC2_ERROR));
- #ifdef IRIX_5_3_LIBRARY
- (void) dictinsert(d, "NEXT_NOT_AVAILABLE",
- newintobject(CL_NEXT_NOT_AVAILABLE));
- (void) dictinsert(d, "SCHEME_BUSY", newintobject(CL_SCHEME_BUSY));
- (void) dictinsert(d, "SCHEME_NOT_AVAILABLE",
- newintobject(CL_SCHEME_NOT_AVAILABLE));
- #endif
- #ifdef CL_LUMA_THRESHOLD
- /* backward compatibility */
- (void) dictinsert(d, "LUMA_THRESHOLD",
- newintobject(CL_LUMA_THRESHOLD));
- (void) dictinsert(d, "CHROMA_THRESHOLD",
- newintobject(CL_CHROMA_THRESHOLD));
- (void) dictinsert(d, "EDGE_THRESHOLD",
- newintobject(CL_EDGE_THRESHOLD));
- (void) dictinsert(d, "BLENDING", newintobject(CL_BLENDING));
- (void) dictinsert(d, "QUALITY_FACTOR",
- newintobject(CL_QUALITY_FACTOR));
- (void) dictinsert(d, "STREAM_HEADERS",
- newintobject(CL_STREAM_HEADERS));
- (void) dictinsert(d, "QUALITY_LEVEL", newintobject(CL_QUALITY_LEVEL));
- (void) dictinsert(d, "TILE_THRESHOLD",
- newintobject(CL_TILE_THRESHOLD));
- (void) dictinsert(d, "SAMPLES_PER_TILE",
- newintobject(CL_SAMPLES_PER_TILE));
- #endif
-
- if (err_occurred())
- fatal("can't initialize module cl");
-
- (void) clSetErrorHandler(cl_ErrorHandler);
- }
-